Monad classes using functional dependencies, with instances for
various monad transformers, inspired by the paper `Functional
Programming with Overloading and Higher-Order Polymorphism', by
Mark P Jones, in `Advanced School of Functional Programming', 1995
(http://web.cecs.pdx.edu/~mpj/pubs/springschool.html).
